<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="leflo" id="leflo"><span data-lake-id="u3ae9497c" id="u3ae9497c">典型回答</span></h1>
  <p data-lake-id="u78dbefce" id="u78dbefce"><br></p>
  <p data-lake-id="u5532ea4c" id="u5532ea4c"><span data-lake-id="u517688d2" id="u517688d2">这个问题其实考查的是Redis的数据预热+更新+淘汰+过期相关的内容。主要回答的时候考虑以下几个方面：</span></p>
  <p data-lake-id="u0a37da4b" id="u0a37da4b"><span data-lake-id="ue0366cdf" id="ue0366cdf">​</span><br></p>
  <h3 data-lake-id="EaH8e" id="EaH8e"><span data-lake-id="uf47e3e06" id="uf47e3e06">1、数据预热</span></h3>
  <p data-lake-id="u5a42fc09" id="u5a42fc09"><span data-lake-id="ua8bf4460" id="ua8bf4460">​</span><br></p>
  <p data-lake-id="u3cc6df71" id="u3cc6df71"><span data-lake-id="u4090b375" id="u4090b375">MySQL中有2000万，我们要往Redis中放20万，那么，不能随机放20万吧，总要挑选一些合适的数据放进去，那么就需要做缓存的预热了，所以为预热，那就是要把热点数据放进去，而不是放冷数据，那样的话就没有意义了。</span></p>
  <p data-lake-id="ufcb2a2ff" id="ufcb2a2ff"><span data-lake-id="udacddcbd" id="udacddcbd">​</span><br></p>
  <p data-lake-id="ue3324219" id="ue3324219"><span data-lake-id="u647ff61f" id="u647ff61f">所以，我们可以根据实际的业务情况，把那些当前比较热的或者接下来一段时间可能比较热的数据把他们提前放到缓存中，这样至少可以保证缓存刚生效的时候，数据是相对热的。</span></p>
  <p data-lake-id="u3caec235" id="u3caec235"><span data-lake-id="u0c921958" id="u0c921958">​</span><br></p>
  <p data-lake-id="u3a5b31d7" id="u3a5b31d7"><span data-lake-id="uccf22107" id="uccf22107">​</span><br></p>
  <h3 data-lake-id="pBqtR" id="pBqtR"><span data-lake-id="u5e8c9811" id="u5e8c9811">2、热点数据更新</span></h3>
  <p data-lake-id="u810ee36f" id="u810ee36f"><strong><span data-lake-id="udc69d6e9" id="udc69d6e9">​</span></strong><br></p>
  <p data-lake-id="uadc73b0a" id="uadc73b0a"><span data-lake-id="u987c1700" id="u987c1700">热点数据不是一成不变的，随着线上业务的不断变化，热点数据也会不断地发生汰换，所以，我们在实际工作中，一般会做实时的热点数据的检测，</span></p>
  <p data-lake-id="u4d61f101" id="u4d61f101"><span data-lake-id="u817c8360" id="u817c8360">​</span><br></p>
  <p data-lake-id="u3fa23e36" id="u3fa23e36"><span data-lake-id="u08e0f2ba" id="u08e0f2ba">下面这个介绍过如何实时收集热key：</span></p>
  <p data-lake-id="ucd8af2a1" id="ucd8af2a1"><br></p>
  <p data-lake-id="u26a53e2c" id="u26a53e2c"><span data-lake-id="u523500f5" id="u523500f5">可以了解下JD的这个热key框架 ：</span><a href="https://gitee.com/jd-platform-opensource/hotkey" target="_blank" data-lake-id="u0f8563bc" id="u0f8563bc"><span data-lake-id="u8701e603" id="u8701e603">https://gitee.com/jd-platform-opensource/hotkey</span></a></p>
  <p data-lake-id="u06895c31" id="u06895c31"><span data-lake-id="u43df9b0c" id="u43df9b0c">​</span><br></p>
  <p data-lake-id="uccb803d3" id="uccb803d3"><span data-lake-id="u382ca5d2" id="u382ca5d2">​</span><br></p>
  <h3 data-lake-id="WPpOd" id="WPpOd"><span data-lake-id="u08c9c28c" id="u08c9c28c">3、缓存过期策略</span></h3>
  <p data-lake-id="u97017e4d" id="u97017e4d"><span data-lake-id="ue2df7265" id="ue2df7265">​</span><br></p>
  <p data-lake-id="u06108cf5" id="u06108cf5"><span data-lake-id="u25170e59" id="u25170e59">选择正确的缓存策略非常重要。使用 Redis 的 LRU（最近最少使用）或 LFU（最不经常使用）等缓存策略可以确保 Redis 中保留的是经常访问的热点数据。这些策略会自动移除不常用的数据，保留经常访问的数据。</span></p>
  <p data-lake-id="uc0eac516" id="uc0eac516"><span data-lake-id="u592746f3" id="u592746f3">​</span><br></p>
  <p data-lake-id="ue9f5fac5" id="ue9f5fac5"><span data-lake-id="uf22e5f38" id="uf22e5f38">​</span><br></p>
  <p data-lake-id="u997de045" id="u997de045"><span data-lake-id="u63f49943" id="u63f49943">LRU策略适用于短期内访问频率较高的热点数据。LFU策略适用于长期内访问频率较高的热点数据。如果业务场景中热点数据的访问模式相对稳定，而且在短期内访问频率较高，那么LRU更适合；如果热点数据的访问频率存在较大波动，而且我们更关心长期内经常访问的数据，那么LFU更适合。</span></p>
  <p data-lake-id="u00456706" id="u00456706"><span data-lake-id="u80b1226d" id="u80b1226d">​</span><br></p>
  <p data-lake-id="u5f34124a" id="u5f34124a"><span data-lake-id="ucc325221" id="ucc325221">​</span><br></p>
  <h3 data-lake-id="yRY24" id="yRY24"><span data-lake-id="u5099fc4f" id="u5099fc4f">4、缓存淘汰策略</span></h3>
  <p data-lake-id="u3c726832" id="u3c726832"><span data-lake-id="u2f1ee725" id="u2f1ee725">​</span><br></p>
  <p data-lake-id="u3246a394" id="u3246a394"><span data-lake-id="u9468fa78" id="u9468fa78">Redis也有多种内存淘汰策略，并且可以结合给key设置超时时间，然后采用volatile-lru方式来把不太用的key移除掉，节省Redis的内存。</span></p>
  <p data-lake-id="u769224c8" id="u769224c8"><span data-lake-id="uf2ad9813" id="uf2ad9813">​</span><br></p>
 </body>
</html>